package com.supcon.tea.main;

import com.supcon.tea.common.Constant;
import com.supcon.tea.work.questionnaire.dao.QuestionnaireDao;
import com.supcon.tea.work.questionnaire.domain.Option;
import com.supcon.tea.work.questionnaire.domain.Physique;
import com.supcon.tea.work.questionnaire.domain.Question;
import com.supcon.tea.work.questionnaire.domain.Questionnaire;
import com.supcon.tea.work.questionnaire.domain.dto.QuestionnaireDTO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * Spring Boot应用程序在启动后，会遍历CommandLineRunner接口的实例并运行它们的run方法。也可以利用@Order注解（或者实现Order接口）来规定所有CommandLineRunner实例的运行顺序。
 * Created by zhengjian1 on 2017/7/25.
 */
@Component
@Order(value=1)
public class StartupRunner implements CommandLineRunner {
    @Autowired
    QuestionnaireDao questionnaireDao;
    @Autowired
    private RedisTemplate redisTemplate;
    //@Override
    public void run2(String... args) throws Exception {
        System.out.println("=========关闭的同步缓存==========");
    }
    @Override
    public void run(String... args) throws Exception {
        ValueOperations<String,Object> operations = redisTemplate.opsForValue();
        List<Questionnaire> questionnaires = this.questionnaireDao.getQuestionnaire();
        List<Physique> physiques = this.questionnaireDao.getAllPhysique();
        List<Question> questions = this.questionnaireDao.getQuestion();
        for (Questionnaire questionnaire:questionnaires) {
            List<Integer> questionIds = this.questionnaireDao.getQuestionIds(questionnaire.getId());
            questionnaire.setQuestionIds(questionIds);
            String questionnaireKey = Constant.PREFIX_REDIS_QUESTIONNAIRE_KEY + questionnaire.getQuestionnaireType();
            operations.set(questionnaireKey,questionnaire);
        }
        physiques.stream().forEach(physique -> operations.set(Constant.PREFIX_REDIS_PHYSIQUE_KEY + physique.getType(),physique));
        questions.stream().forEach(question -> {
            question.setOptions(this.questionnaireDao.getOptions(question.getId()));
            String questionKey = Constant.PREFIX_REDIS_QUESTION_KEY + question.getId();
            operations.set(questionKey,question);
        });
    }
}
